package ch.penas.business.dom;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/** @author Daniel */
@Entity
@Table(name = "OUVRAGES")
public class Ouvrage implements Serializable {

	
	/** La serialization de la class ouvrage pour question de securiter. */
	private static final long serialVersionUID = -6146935825517747043L;
	
	/** Le code ISBN de l'ouvrage. */
	@Id
    @Column(name = "CODE_ISBN")
	private int codeIsbn;
	
	/** Le titre de l'ouvrage. */
	@Column(name = "TITRE")
	private String titre;
	
	/** Le dessinateur de l'ouvrage. */
	@Column(name = "DESSINATEUR")
	private String dessinateur;
	
	/** L'auteur de l'ouvrage. */
	@Column(name = "AUTEUR")
	private String auteur;
	
	/** L'editeur de l'ouvrage. */
	@Column(name = "EDITEUR")
	private String editeur;
	
	/** Le nombre de page de l'ouvrage. */
	@Column(name = "NB_PAGES")
	private int nBpages;
	
	/** Le genre de l'ouvrage. */
	@Column(name = "GENRE")
	private String genre;
	
	/** Le genre de public toucher de l'ouvrage. */
	@Column(name = "GENRE_PUBLIC")
	private String genrePublic;
	
	/** La provenance de l'ouvrage. */
	@Column(name = "PROVENANCE")
	private String provenance;
	
	/** La parution de l'ouvrage. */
	@Column(name = "PARUTION")
	private String parution;
	
	/** Si l'ouvrage est emprunter ou pas. */
	@Column(name = "EMPRUNTER")
	private String emprunter;
	
	/** Ouvrage prêter le... */
	@Column(name = "DATE_PRET")
    private String datePret;
	
    /** * Ouvrage a rendre le... */
	@Column(name = "A_RENDRE_LE")
	private String aRendreLe;
	
	/** Le constructore par d�faut de la class ouvrage. */
	public Ouvrage() { }
	
	
	/** Redefinition du constructeur de la class ouvrage.
	 * 
	 * @param aCodeIsbn est egale à la variable codeIsbn
	 * @param aTitre est egale à la variable titre
	 * @param aDessinateur est egale à la variable dessinateur
	 * @param aAuteur est egale à la variable auteur
	 * @param aEditeur est egale à la variable editeur
	 * @param aNbPages est egale à la variable nBpages
	 * @param aGenre est egale à la variable genre
	 * @param aGenrePublic est egale à la variable genrePublic
	 * @param aProvenance est egale à la variable provenance
	 * @param aParution est egale à la variable parution
	 * @param aEmprunter est egale à la variable emprunter
	 * @param aDatePret est egale à la variable datePret
	 * @param aArendreLe est egale à la variable aRendreLe
	 */
    public Ouvrage(final int aCodeIsbn, final String aTitre, final String aDessinateur, final String aAuteur,
            final String aEditeur, final int aNbPages, final String aGenre, final String aGenrePublic,
            final String aProvenance, final String aParution, final String aEmprunter, final String aDatePret,
            final String aArendreLe) {
        this.codeIsbn = aCodeIsbn;
        this.titre = aTitre;
        this.dessinateur = aDessinateur;
        this.auteur = aAuteur;
        this.editeur = aEditeur;
        this.nBpages = aNbPages;
        this.genre = aGenre;
        this.genrePublic = aGenrePublic;
        this.provenance = aProvenance;
        this.parution = aParution;
        this.emprunter = aEmprunter;
        this.datePret = aDatePret;
        this.aRendreLe = aArendreLe;
    }
	
	/** Permet d'avoir une sorte de clé primaire.
	 * 
	 * @return hashCode de type string
	 */
	public final String getKey() {
		return String.valueOf(hashCode());
	}
	
	/** Permet de recupéré la valeur de l'isbn de l'ouvrage.
	 * 
	 * @return codeIsbn
	 */
	public final int getCodeIsbn() {
		return this.codeIsbn;
	}
	/** Permet de modifier la valeur de l'isbn de l'ouvrage.
	 * 
	 * @param aCodeIsbn est egale au codeIsbn de l'ouvrage
	 */
	public final void setCodeIsbn(final int aCodeIsbn) {
		this.codeIsbn = aCodeIsbn;
	}

	/** Permet de recupéré la valeur du titre de l'ouvrage.
     * 
     * @return titre
     */
	public final String getTitre() {
		return this.titre;
	}
	/** Permet de modifier la valeur du titre de l'ouvrage.
     * 
     * @param aTitre est egale au titre de l'ouvrage
     */
	public final void setTitre(final String aTitre) {
		this.titre = aTitre;
	}

	/** Permet de recupéré la valeur du dessinateur de l'ouvrage.
     * 
     * @return dessinateur
     */
	public final String getDessinateur() {
		return this.dessinateur;
	}
	/**
     * Permet de modifier la valeur du dessinateur de l'ouvrage.
     * 
     * @param aDessinateur est egale au dessinateur de l'ouvrage
     */
	public final void setDessinateur(final String aDessinateur) {
		this.dessinateur = aDessinateur;
	}

	/** Permet de recupéré la valeur de l'auteur de l'ouvrage.
     * 
     * @return auteur
     */
	public final String getAuteur() {
		return this.auteur;
	}
	/** Permet de modifier la valeur de l'auteur de l'ouvrage.
     * 
     * @param aAuteur est egale a l'auteur de l'ouvrage
     */
	public final void setAuteur(final String aAuteur) {
		this.auteur = aAuteur;
	}

	/** Permet de recupéré la valeur de l'editeur de l'ouvrage.
     * 
     * @return editeur
     */
	public final String getEditeur() {
		return this.editeur;
	}
	/** Permet de modifier la valeur de l'editeur de l'ouvrage.
     * 
     * @param aEditeur est egale a l'editeur de l'ouvrage
     */
	public final void setEditeur(final String aEditeur) {
		this.editeur = aEditeur;
	}

	/** Permet de recupéré la valeur du nBpages de l'ouvrage.
     * 
     * @return nBpages
     */
	public final int getNbPages() {
		return this.nBpages;
	}
	/** Permet de modifier la valeur du nBpages de l'ouvrage.
     * 
     * @param aNbPages est egale au nBpages de l'ouvrage
     */
	public final void setNbPages(final int aNbPages) {
		this.nBpages = aNbPages;
	}

	 /** Permet de recupéré la valeur du genre de l'ouvrage.
     * 
     * @return genre
     */
	public final String getGenre() {
		return this.genre;
	}
	 /** Permet de modifier la valeur du genre de l'ouvrage.
     * 
     * @param aGenre est egale au genre de l'ouvrage
     */
	public final void setGenre(final String aGenre) {
		this.genre = aGenre;
	}

	 /** Permet de recupéré la valeur du genrePublic de l'ouvrage.
     * 
     * @return genrePublic
     */
	public final String getGenrePublic() {
		return this.genrePublic;
	}
	 /** Permet de modifier la valeur du genrePublic de l'ouvrage.
     * 
     * @param aGenrePublic est egale au genrePublic de l'ouvrage
     */
	public final void setGenrePublic(final String aGenrePublic) {
		this.genrePublic = aGenrePublic;
	}

    /** Permet de recupéré la valeur de provenance de l'ouvrage.
     * 
     * @return provenance
     */
	public final String getProvenance() {
		return this.provenance;
	}
    /** Permet de modifier la valeur de provenance de l'ouvrage.
     * 
     * @param aProvenance est egale a provenance de l'ouvrage
     */
	public final void setProvenance(final String aProvenance) {
		this.provenance = aProvenance;
	}

    /** Permet de recupéré la valeur de la parution de l'ouvrage.
     * 
     * @return parution
     */
	public final String getParution() {
		return this.parution;
	}
    /** Permet de modifier la valeur de la parution de l'ouvrage.
     * 
     * @param aParution est egale a la parution de l'ouvrage
     */
	public final void setParution(final String aParution) {
		this.parution = aParution;
	}

    /** Permet de recupéré la valeur de emprunter de l'ouvrage.
     * 
     * @return emprunter
     */
	public final String getEmprunter() {
		return this.emprunter;
	}
    /** Permet de modifier la valeur de emprunter de l'ouvrage.
     * 
     * @param aEmprunter est egale a emprunter de l'ouvrage
     */
	public final void setEmprunter(final String aEmprunter) {
		this.emprunter = aEmprunter;
	}
	
    /**
     * Permet de recupéré la valeur de la datePret de l'ouvrage.
     * 
     * @return datePret
     */
	public final String getDatePret() {
		return this.datePret;
	}
    /** Permet de modifier la valeur de la datePret de l'ouvrage.
     * 
     * @param aDatePret est egale a la datePret de l'ouvrage
     */
	public final void setDatePret(final String aDatePret) {
		this.datePret = aDatePret;
	}

    /** Permet de recupéré la valeur de aRendreLe de l'ouvrage.
     * 
     * @return aRendreLe
     */
	public final String getArendreLe() {
		return this.aRendreLe;
	}
    /** Permet de modifier la valeur de aRendreLe de l'ouvrage.
     * 
     * @param aArendreLe est egale a aRendreLe de l'ouvrage
     */
	public final void setArendreLe(final String aArendreLe) {
		this.aRendreLe = aArendreLe;
	}

	/** Permet de valider oui/non si les champs son corectement �crit. */
	public final void validate() {
		if (this.getCodeIsbn() == 0) {
			throw new IllegalArgumentException("Le champ: (code ISBN) ne doit pas etre vide");
		}
		if (this.getTitre() == null) {
			throw new IllegalArgumentException("Le champ: (titre) ne doit pas etre vide");
		}
		if (this.getDessinateur() == null) {
			throw new IllegalArgumentException("Le champ: (dessinateur) ne doit pas etre vide");
		}
		if (this.getAuteur() == null) {
			throw new IllegalArgumentException("Le champ: (auteur) ne doit pas etre vide");
		}
		if (this.getEditeur() == null) {
			throw new IllegalArgumentException("Le champ: (editeur) ne doit pas etre vide");
		}
		if (this.getGenre() == null) {
			throw new IllegalArgumentException("Le champ: (genre) ne doit pas etre vide");
		}
		if (this.getGenrePublic() == null) {
			throw new IllegalArgumentException("Le champ: (genre public) ne doit pas etre vide");
		}
		if (this.getProvenance() == null) {
			throw new IllegalArgumentException("Le champ: (provenance) ne doit pas etre vide");
		}
		if (this.getParution() == null) {
			throw new IllegalArgumentException("Le champ: (parution) ne doit pas etre vide");
		}
		if (this.getEmprunter() == null) {
			throw new IllegalArgumentException("Le champ: (emprunteur) ne doit pas etre vide");
		}
		if (this.getDatePret() == null) {
			throw new IllegalArgumentException("Le champ: (date de prêt) ne doit pas etre vide");
		}
		if (this.getArendreLe() == null) {
			throw new IllegalArgumentException("Le champ: (a rendre le) ne doit pas etre vide");
		}
	}
}